/**
 ******************************************************************************
 * @file    bsp_key.c
 * @author  ��Ӿ��
 * @date    2025/6/16
 * @version v1.0
 * @brief   ��������ʵ���ļ����ṩ������ʼ����ɨ�輰�¼������Ƚӿ�
 ******************************************************************************
 */
#include "bsp_key.h"
#include "ebtn.h" 
#include "mygpio.h"
// ���尴������ʵ��
const ebtn_btn_param_t defaul_ebtn_param = EBTN_PARAMS_INIT(
    10,     // time_debounce: ����ʱ�������� 10ms�������ϻ�е�������ԣ�
    0,     // time_debounce_release: �ͷŶ���ͬ������
    20,     // time_click_pressed_min: �����ȶ�ʱ�� 20ms����˷�������Ӧ��
    500,    // time_click_pressed_max: ���� 500ms�������ж���
    100,    // time_click_multi_max: ���� 300ms�����û�����Ͽ����Ϊ 200ms��
    100,    // time_keepalive_period: �������ڲ���
    5       // max_consecutive: ���� 5 ����
);
// ö�ٰ�������
typedef enum
{
	// ������
	ONE_KEY_1 = 0,
	ONE_KEY_2,
	ONE_KEY_MAX,
} user_key_t;
// ����ʵ����ʼ��
static ebtn_btn_t btns[] = 
{
	EBTN_BUTTON_INIT(ONE_KEY_1, &defaul_ebtn_param),
	EBTN_BUTTON_INIT(ONE_KEY_2, &defaul_ebtn_param),
};
typedef struct
{
	uint8_t key_cnt;
	uint32_t last_tick;
} key_multiple_t;
key_multiple_t key_multiple[ONE_KEY_MAX] = {0};
// ����״̬��ȡ����
uint8_t prv_btn_get_state(struct ebtn_btn *btn)
{
	switch (btn->key_id)
	{
		case ONE_KEY_1:
			return !HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
		case ONE_KEY_2:
			return !HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4);
	}
	
	return 0;
}

void prv_btn_event(struct ebtn_btn *btn, ebtn_evt_t evt)
{
	switch(evt)
	{
		case EBTN_EVT_ONCLICK:// ����
			if(btn->click_cnt == 1)
			{
				g_led_buf[btn->key_id] = 1;
			}
			if(btn->click_cnt == 2)
			{
				g_led_buf[btn->key_id] = 0;
			}
		break;
		case EBTN_EVT_KEEPALIVE:// ����
			g_led_buf[btn->key_id] ^= 1;
		break;
	}
}
void btn_init(void)
{
	ebtn_init( btns,					// ʵ����ʼ��
			   EBTN_ARRAY_SIZE(btns),	// ʵ������
			   NULL,					// ��ϰ���
			   0,						// ��ϰ�������
			   prv_btn_get_state,		// KEY״̬��ȡ
			   prv_btn_event		 );	// KEY�����¼�
}

void btn_task(void)
{
	ebtn_process(HAL_GetTick());
}

uint8_t key_scan()
{
	uint8_t temp = 0;
	if(!HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1)) temp = 1;
//	if(!HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4)) temp = 2;
	return temp;
}
